package router

import (
	"data_service/handlers"
	"data_service/middleware"
	"data_service/models"
	"data_service/server"
	"fmt"

	"github.com/gin-gonic/gin"
)

// 全局Hub实例
var ChatHub *handlers.Hub

// SetupRouter 配置应用路由
func SetupRouter() *gin.Engine {
	r := gin.Default()

	// 全局中间件
	r.Use(middleware.CORS()) // CORS跨域

	// 健康检查接口（用于检测服务器状态）
	r.GET("/health", handlers.HealthCheck)

	// 公共路由 (无需认证)
	r.POST("/register", handlers.Register)
	r.POST("/login", handlers.Login)

	// 微信登录路由
	wechat := r.Group("/wechat")
	{
		wechat.GET("/auth-url", handlers.GetWechatAuthURL)   // 获取微信授权链接
		wechat.GET("/callback", handlers.WechatCallback)    // 微信回调接口
	}

	// 数据同步路由
	r.POST("/sync/user", handlers.SyncUserData)

	// 用户路由
	users := r.Group("/users")
	{
		users.GET("/search", handlers.SearchUsers)   // 搜索用户
		users.GET("/count", handlers.GetUserCount)   // 获取用户数量
		users.GET("/id/:id", handlers.GetUserById)   // 通过ID查询用户
		users.GET("/:id", handlers.GetUserInfo)      // 通过邮箱查询用户（id参数实际是邮箱）
		users.PUT("/:id", handlers.UpdateUserInfo)   // 更新用户信息（通过邮箱）
		users.POST("/avatar", handlers.UpdateAvatar) // 更新用户头像（通过邮箱）
	}

	// 好友路由
	friends := r.Group("/friends")
	{
		friends.POST("/add", handlers.AddFriendHandler)                              // 添加好友
		friends.GET("", handlers.GetFriendsHandler)                                  // 获取好友列表
		friends.POST("/delete", handlers.DeleteFriendHandler)                        // 删除好友
		friends.POST("/request", handlers.SendFriendRequestHandler)                  // 发送好友申请
		friends.GET("/requests", handlers.GetFriendRequestsHandler)                  // 获取好友申请列表
		friends.POST("/request/:id/respond", handlers.RespondToFriendRequestHandler) // 处理好友申请
		friends.POST("/request/:id/cancel", handlers.CancelFriendRequestHandler)     // 取消好友申请
	}

	// 聊天路由
	chat := r.Group("/chat")
	{
		// WebSocket连接
		chat.GET("/ws", handlers.HandleWebSocket(ChatHub))

		// HTTP API
		chat.GET("/messages", handlers.GetChatMessages)     // 获取聊天消息
		chat.GET("/online", handlers.GetOnlineUsers)        // 获取在线用户
		chat.POST("/rooms", handlers.CreateChatRoomHandler) // 创建房间
		chat.GET("/rooms", handlers.GetUserRoomsHandler)    // 获取房间列表
	}

	// 管理员路由
	admin := r.Group("/admin")
	{
		// 用户管理
		admin.GET("/users", handlers.GetUserList)             // 获取用户列表
		admin.GET("/users/stats", handlers.GetUserStats)      // 获取用户统计
		admin.PUT("/users/:id/role", handlers.UpdateUserRole) // 更新用户角色
		admin.PUT("/users/:id/ban", handlers.BanUser)         // 封禁/解封用户
		admin.GET("/users/:id/role", handlers.GetUserRole)    // 获取用户角色信息

		// 公告管理
		admin.GET("/announcements", handlers.GetAnnouncementList)              // 获取公告列表
		admin.POST("/announcements", handlers.CreateAnnouncement)              // 创建公告
		admin.PUT("/announcements/:id", handlers.UpdateAnnouncement)           // 更新公告
		admin.POST("/announcements/:id/publish", handlers.PublishAnnouncement) // 发布公告
		admin.DELETE("/announcements/:id", handlers.DeleteAnnouncement)        // 删除公告

		// 系统管理
		admin.GET("/logs", handlers.GetSystemLogs)   // 获取系统日志
		admin.GET("/system", handlers.GetSystemInfo) // 获取系统信息
		admin.GET("/roles", handlers.GetRoles)       // 获取角色列表
	}

	return r
}

// InitChatHub 初始化聊天Hub
func InitChatHub() {
	chatService := server.NewChatService(models.GetDB())
	ChatHub = handlers.NewHub(chatService)
	go ChatHub.Run()
	fmt.Println("✅ 聊天Hub初始化完成")
}
